/**
 * <p>Copyright (c) 2017 深圳市鹏途交通科技有限公司</p>
 * <p>					All right reserved. 		 </p>
 * <p>项目名称 ： 	深圳市道路养护管理系统        </p>
 * <p>创建者   :	 刘波波 
 * <p>描   述  :     </p>
 */
package com.pengtu.service.test2;


public class ByteTransformer {
	
	public static void main(String[] args) {
		System.out.println(hexString2Bytes("81"));
		String[] strs = new String[]{"05","00","0A","0F","00","FF","FF"};
		byte[] bytes = ByteTransformer.hexBytestoBytes(strs);
		String[] str = ByteTransformer.to16Strbytes(bytes);
		CRC16M cm = new CRC16M();
		cm.update(bytes, bytes.length);
		System.out.println(cm.getValue());
		System.out.println(str);
	}
	
	/**
     *@author 刘波波
     *@date 2017年4月10日
     *@describe 字符转字节
     */
    private static byte charToByte(char c) {
        return (byte) "0123456789ABCDEF".indexOf(c);
     }
    
    /**
     *@author 刘波波
     *@date 2017年4月10日
     *@describe 16进制字符串转10进制字节数组
     */
    public static byte[] hexString2Bytes(String hex) {
            
            if ((hex == null) || (hex.equals(""))){
                return null;
            }
            else if (hex.length()%2 != 0){
                return null;
            }
            else{                
                hex = hex.toUpperCase();
                int len = hex.length()/2;
                byte[] b = new byte[len];
                char[] hc = hex.toCharArray();
                for (int i = 0; i<len; i++){
                    int p = 2*i;
                    b[i] = (byte) (charToByte(hc[p]) << 4 | charToByte(hc[p+1]));
                }
              return b;
            }           
            
    }
    
    /**
     *@author 刘波波
     *@date 2017年4月10日
     *@describe 10进制字节数组转16进制字符数组
     */
    public static String[] to16Strbytes (byte[] result1) {
    	
    	String[] str = new String[result1.length];
	    for (int i = 0; i < result1.length; i++) {
	        int v = result1[i] & 0xFF;       
	        String hv = Integer.toHexString(v).toUpperCase();  
	        if (hv.length() < 2) {       
	            str[i] = "0";
	            str[i] += hv;
	        }else{
	        	str[i] = hv; 
	        }
	               
	    }
	    return str;
    }
    
    /**
     *@author 刘波波
     *@date 2017年4月10日
     *@describe 16进制字节数组转10进制字节数组
     */
    public static byte[] hexBytestoBytes(String[] strs) {
    	String str = "";
    	byte[] bytes = new byte[strs.length];
    	for(int i = 0; i < strs.length; i++) {
    		str += strs[i];
    	}
    	for(int i = 0; i < strs.length; i++) {
    		int b = 0;
    		for(int k = 0; k < 2; k++) {
			int a = 0;
    		String subs = str.charAt(i*2+k)+"";
    		if("A".equals(subs)) {
    			a = 10;
    		}else if("B".equals(subs)) {
    			a = 11;
    		}else if("C".equals(subs)) {
    			a = 12;
    		}else if("D".equals(subs)) {
    			a = 13;
    		}else if("E".equals(subs)) {
    			a = 14;
    		}else if("F".equals(subs)) {
    			a = 15;
    		}else{
    			a = Integer.parseInt(subs);
    		}
    		if(k == 0){
    			b += a*16;
    		}else{
    			b += a;
    		}
    		}
    		bytes[i] = (byte) b;
    	}
		return bytes;
    }
    
    /**
     *@author 刘波波
     *@date 2017年4月10日
     *@describe int转byte数组
     */
    public static byte[] intToBytes(int n) {
          byte[] b = new byte[4];
         
          for(int i = 0;i < 4;i++) {
           b[i]=(byte)(n>>(24-i*8));
        
      } 
      return b;
    }
}
